#include "main.h"
#include "stdio.h"
// 要求将所有代码写在本文件内

int ListInitiate(SLNode **head)/*初始化*/ {
    *head=(SLNode*) malloc(sizeof (SLNode));
    (*head)->next=NULL;
    return 0;
}

int ListLength(SLNode *head) /* 单链表的长度*/{
    SLNode *p=head;
    int size=0;
    while (p->next!=NULL){
        p=p->next;
        size++;
    }
    return size;
}

int ListInsert(SLNode *head, int i, DataType x) {
    SLNode *p,*q;
    p=head;
    int j=0;
    if(i!=0){
        for(;j<i&&p->next!=NULL;j++)
            p=p->next;}
    if(i!=j){
        printf("插入元素位置参数错误");
        return 1;}
    q=(SLNode*) malloc(sizeof (SLNode));
    q->data=x;
    q->next=p->next;
    p->next=q;
    return 0;
}

int ListDelete(SLNode *head, int i, DataType *x) {
    SLNode *p,*k;
    p=head;
    int j=0;
    for(;j<i;j++)
        p=p->next;
    if(i!=j){
        printf("删除数据元素位置参数错误");
        return 0;}
    k=p->next;
    *x=k->data;
    p->next=p->next->next;
    free(k);
    return 1;
}

int ListGet(SLNode *head, int i, DataType *x) {
    SLNode *p;
    int j;
    p=head;
    j=-1;
    for(;j<i;j++)
        p=p->next;
    if(j!=i){
        printf("获取数据元素位置错误");
        return 0;
    }
    *x=p->data;
    return 1;
}

int Destroy(SLNode **head){
    SLNode *p, *q;
    p = *head;
    while (p != NULL){
        q = p;
        p = p->next;
        free(q);
    }
    (*head) = NULL;
    return 0;
}

void main(void) {
    SLNode *head;
    int i , x;
    ListInitiate(&head);/*初始化*/
    for(i = 0; i < 10; i++) {
        if(ListInsert(head, i, i+1) == 1) /*插入10个数据元素*/
        {
            printf("错误 \n");
            return;
        }
    }

    if(ListDelete(head, 4, &x) == 0) { /*删除数据元素5*/
        printf("错误 \n");
        return;
    }
    printf("%d\n", ListLength(head));

    for(i = 0; i < ListLength(head); i++) {
        if(ListGet(head, i, &x) == 0) /*取元素*/
        {
            printf("错误 \n");
            return;
        }
        else printf("%d    ", x);/*显示数据元素*/
    }

    Destroy(&head);
}
